/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
 
package ru.jimbot.modules;
 
//import com.mysql.jdbc.PreparedStatement;
//import java.sql.ResultSet;
import java.util.Vector;
import ru.jimbot.Manager;
import ru.jimbot.modules.anek.AnekProps;
import ru.jimbot.modules.anek.AnekServer;
import ru.jimbot.modules.chat.ChatProps;
import ru.jimbot.modules.chat.ChatServer;
import ru.jimbot.util.*;
 
/**
* Авто смена x-cтатуса. Теперь общая для всех модулей.
* @author fraer72
* @author alex_xpert
*/
public class AutoStatus implements Runnable {
    private int sleepAmount = 1000;
    private Thread th;
    private long time = System.currentTimeMillis();
    private AbstractServer srv;
    private int number = 0;
    private String text = "";
    public boolean isStart = false;
    private Vector XStatus = new Vector();
    private AbstractProps psp;

    public AutoStatus(AbstractServer s) {
        srv = s;
        if(srv instanceof ChatServer) {
            this.psp = ChatProps.getInstance(srv.getName());
        } else {
            this.psp = AnekProps.getInstance(srv.getName());
        }
        loadXStatus();
    }


    private void setXStatus(){
        number = getNumber();// Номер
        text = getText();// Текст
        // Проверим номер
        if(number < 1 || number > 37) {
            Log.error("Неправильный номер статуса в автосмене: " + number +"!");
            return; // Если номер неверный!
        }
        // Проверим текст
        if(text.trim().equals("")) {
            Log.error("Неправильный текст статуса в автосмене!");
            return; // Если текст неверный
        }
        psp.setIntProperty( "icq.xstatus", number );
        psp.setStringProperty("icq.STATUS_MESSAGE2", text);
        Manager.getInstance().getService(srv.getName()).getProps().save();
        // Перебираем все уины
        if(srv instanceof ChatServer) {
            for(int uins = 0; uins < ((ChatServer) srv).con.uins.count(); uins++) {
                if(((ChatServer) srv).con.uins.p.get(uins).isOnLine()) {// Если номер онлайн, то
                    ((ChatServer) srv).con.uins.p.get(uins).setXStatusNumber(number);// меняем статус.
                }
            }
        } else {
            for(int uins = 0; uins < ((AnekServer) srv).con.uins.count(); uins++) {
                if(((AnekServer) srv).con.uins.p.get(uins).isOnLine()) {// Если номер онлайн, то
                    ((AnekServer) srv).con.uins.p.get(uins).setXStatusNumber(number);// меняем статус.
                }
            }
        }
        //Log.talk("Автосмена x-статуса (номер - " + number + ", текст - " + text);
    }

    public void start() {
        th = new Thread(this);
        th.setPriority(Thread.NORM_PRIORITY);
        th.start();
    }

    public synchronized void stop() {
        th = null;
        notify();
    }

    @Override
    public void run() {
        Thread me = Thread.currentThread();
        while (th == me) {
            if(!isStart) setStart(true);
            if((System.currentTimeMillis() - time)>this.psp.getIntProperty("auto_status.time")*60000) {
                setXStatus();
                time = System.currentTimeMillis();
            }
            try {
                Thread.sleep(sleepAmount);
            } catch (InterruptedException e) {
                break;
            }
        }
        th=null;
    }

    /*
    * кэшируем x-status.txt при первом запуске
    */
    public final void loadXStatus() {
        String s = srv instanceof ChatServer ? ChatProps.getInstance(srv.getName()).loadText("./x-status.txt")
                                             : AnekProps.getInstance(srv.getName()).loadText("./x-status.txt");
        String[] ss = s.split(";");
        for (int i = 0; i<ss.length; i++) XStatus.add(ss[i]);
    }


    public void setStart(boolean start){
        isStart = start;
    }

    public boolean isStart(){
        return isStart;
    }

    public int getNumber() {
        int num = (int) (Math.random() * 34);
        return num;
    }

    public String getText() {
        int R = (int) ((Math.random() * XStatus.size()));
        return (String)XStatus.get(R);
    }
 
}
